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

时间:2013-10-01 16:37:40

标签: php apache .htaccess mod-rewrite url-rewriting

我正在尝试从过去两天开始重写。

  1. 强制使用www.example.com - 完成
  2. 隐藏PHP扩展程序 - 已完成,但不确定这是一个好方法
  3. 404自定义页面错误 - 完成
  4. 现在我的主要问题是

    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
    

    任何帮助都非常值得感谢,谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试:

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]