我正在建设一个网站,发现了一个问题。
当用户访问 www.website.com/something 时,我希望 htaccess 打开 www.website.com/index.php?s=something。我的当前重定向功能可以正常运行,但如果我有这个“something”作为现有文件夹,则会出现问题。
"s" 代表 "子页面"。
只有当文件夹存在( /js /css /images ..etc )时,我才会遇到问题。所以当我尝试访问 www.website.com/images 时,它仍然显示正确的页面,但地址栏中显示为www.website.com/images/?s=images。需要注意的是,如果我将?s=images更改为?s=images213123,则php仍然只将/images/识别为$_GET ['s'];
我对htaccess不熟悉,但这是我迄今为止组合的内容,也许问题不在上面的行中。 我尝试将[L]移动到第3条规则,尝试将有问题的规则与其他规则分开,尽我所能用有限的知识做了一切,但我无法让任何东西工作。
非常感谢任何提示或想法! 在此先感谢您。
当用户访问 www.website.com/something 时,我希望 htaccess 打开 www.website.com/index.php?s=something。我的当前重定向功能可以正常运行,但如果我有这个“something”作为现有文件夹,则会出现问题。
"s" 代表 "子页面"。
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]
只有当文件夹存在( /js /css /images ..etc )时,我才会遇到问题。所以当我尝试访问 www.website.com/images 时,它仍然显示正确的页面,但地址栏中显示为www.website.com/images/?s=images。需要注意的是,如果我将?s=images更改为?s=images213123,则php仍然只将/images/识别为$_GET ['s'];
我对htaccess不熟悉,但这是我迄今为止组合的内容,也许问题不在上面的行中。 我尝试将[L]移动到第3条规则,尝试将有问题的规则与其他规则分开,尽我所能用有限的知识做了一切,但我无法让任何东西工作。
非常感谢任何提示或想法! 在此先感谢您。
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^u/([a-zA-Z0-9_-]+)$ /u.php?u=$1
RewriteRule ^p/([a-zA-Z0-9_-]+)$ /$1.php
RewriteRule ^([a-zA-Z0-9_-]+)/userpage/([a-zA-Z0-9_-]+)/?$ /c.php?s=$1&c=$2
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]
ErrorDocument 400 /index.php
ErrorDocument 401 /index.php
ErrorDocument 403 /index.php
ErrorDocument 404 /index.php
ErrorDocument 500 /index.php
编辑:加入 "DirectorySlash Off" 并按照 @Jon Lin 的回答更改条件和规则,解决了问题。我还需要清除 Firefox 缓存才能看到更改。这是我的最终 htaccess,可以很好地满足我的目的。
Options +FollowSymlinks
RewriteEngine On
DirectorySlash Off
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^u/([a-zA-Z0-9_-]+)$ /u.php?u=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p/([a-zA-Z0-9_-]+)$ /$1.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/userpage/([a-zA-Z0-9_-]+)/?$ /c.php?s=$1&c=$2
# I intentionally skipped the conditions here
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]
ErrorDocument 400 /index.php
ErrorDocument 401 /index.php
ErrorDocument 403 /index.php
ErrorDocument 404 /index.php
ErrorDocument 500 /index.php
DirectorySlash off
,但这样做会使人们查看目录内容,即使有索引文件也是如此。 - Jon Lin