Apache mod Rewrite:如何重写这些URL以制作干净的URL


Apache mod Rewrite: how to rewrite these URLs to make clean URL

我正在尝试按照最近两天的重写进行操作。

  1. 强制使用 www.example.com - 完成
  2. 隐藏PHP扩展 - 完成但不确定这是一个好方法
  3. 自定义页面出现 404 错误 - 完成

现在我的主要问题是

4. 在根 (/) 上托管所有页面

我有以下文件:

news.php
search.php
store.php
allstores.php

客户端请求如下:

Type 1: http://www.example.com/news
Type 2: http://www.example.com/search?q=term
Type 3: http://www.example.com/allstores/H
Type 4: http://www.example.com/myname

我想像这样处理这些客户端请求:

Type 1: http://www.example.com/news  ---rewrite to (add extension)-->news.php
Type 2: http://www.example.com/search?q=term  ---->No change, Let it same
Type 3: http://www.example.com/allstores/H --rewrite to --->http://www.example.com/allstores.php?ln=H
Type 4: http://www.example.com/myname ---rewrite to------> http://www.example.com/store?st=myname

我尝试了以下重写:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example'.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteRule ^(.*) store.php?st=$1 [L]
RewriteRule ^allstores/(.*)$ allstores.php?ln=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /$1.php [L]
ErrorDocument 404 /404.php

任何帮助都是非常可观的,谢谢

你可以试试:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example'.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]
RewriteRule ^allstores/([^/]+)/?$ /allstores.php?ln=$1 [L,QSA,NC]
# To internally forward /foo to /foo.php
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]
RewriteCond %{QUERY_STRING} !^q=.+ [NC]
RewriteRule ^([^/]+)/?$ /store.php?st=$1 [L,QSA]