1

我正在重写特定页面访问的请求,但我想为一些页面添加排除项。假设,我希望我的请求 site.com/page/test 到 goto site.com/page.php?str=test 但我想为一个字符串添加一个排除项,以便不去那个页面而是去另一个页面,比如:site.com/page/contact 应该去 site.com/contact.php

这就是我正在尝试的方式:

RewriteRule ^static/mobile_app/?$ static/mobile_app.php [QSA,L]
RewriteRule ^static/([a-zA-Z0-9%.\-_]+)/?$ static/page.php?url_key=$1 [QSA,L]

我在文件末尾也有这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /static/page.php?url_key=404 [L]

一件奇怪的事情是,如果我尝试以下规则,它会起作用:

RewriteRule ^static/mobile_app.php$ static/mobile_app.php [QSA,L]
RewriteRule ^static/([a-zA-Z0-9%.\-_]+)/?$ static/page.php?url_key=$1 [QSA,L]

意味着,如果我尝试编写带有扩展名的完整文件名,它就可以工作。有人可以帮忙吗?谢谢。

4

1 回答 1

2

像这样完成你的DOCUMENT_ROOT/.htaccess

Options +FollowSymLinks -MultiViews
RewriteEngine On

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

RewriteRule ^static/([\w.-]+)/?$ static/page.php?url_key=$1 [QSA,L,NC]

## To internally redirect /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /static/page.php?url_key=404 [L,QSA]
于 2013-11-12T13:17:11.160 回答