我已经能够设置.htaccess来启用我网站上的虚荣网址。但是,当我尝试清理网站上的其他网址时,我遇到了问题。我会在下面给出场景和我当前的.htaccess:
目前,wwww.mywebsite.com / john重定向到profile.php?user = john。在profile.php中,我检查用户john是否存在于我的数据库中,如果为false,我将重定向到自定义404.php页面。这项工作非常好。当我尝试将wwww.mywebsite.com/photo/abcdefg解释为www.mywebsite.com/photo.php?m=abcdefg时出现问题。出于某种原因,它认为photo是用户的名字,然后将其重写为好像是一个虚荣网址。请参阅下面的.htaccess文件代码:
ErrorDocument 404 http://www.mywebsite.com/404
RewriteEngine on
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC]
RewriteRule ^([^\.]+)$ profile.php?username=$1 [L]
RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteRule ^ HTTP%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
答案 0 :(得分:0)
您需要在任何内部路由之前重定向。然后,您需要在路由到个人资料并更改/photo
之前与.php -f
明确匹配:
ErrorDocument 404 http://www.mywebsite.com/404
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteRule ^ HTTP%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^photo/(.+)$ /photo.php?m=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^\.]+)$ /$1.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ /profile.php?username=$1 [L]