我试图在我的网站上为动态生成的网页添加美化网址,以便当用户访问虚拟网址topicview/interesting-user-friendly-text
时,他真的会看到,topicview.php?topicid=123
我在.htaccess文件中添加了必要的代码,用topicview/interesting-text
替换了网址的topicview.php?topicname=interesting-test
部分,但正则表达式仍然失误。
所以,我更改了Regex以返回整个URL,因此我可以看到为什么它不能使用此代码:
#Allow for topicview/topic-name URLs
RewriteRule (.+)$ topicview.php?topicname=$1 [L]
然后我访问了topicview/user-friendly-text
。我不确定这是否是Network Solutions托管的独特之处,但是,当我检查topicname
GET参数时,我得到了这个字符串作为回报:
data/1/2/323/232/823238/user/999999/htdocs/topicview.php
此网址未显示在topicname
GET参数中,只显示常规文件,例如index.php
或topicview.php
,如果我只访问网址index.php
或{{ 1}}
为什么URL内部如此表示给Apache服务器,如何重写topicview.php
代码以获得mod_rewrite
页面更友好的虚拟URL?
感谢
答案 0 :(得分:0)
对于友好的网址,请在.htaccess文件中尝试此操作
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?topicview/([^/.*]+)/?$ topicview.php?topicname=$1 [L,QSA]
答案 1 :(得分:0)
RewriteRule中匹配的模式通常类似于REQUEST_URI,但您描述的行为表明它与REQUEST_FILENAME或类似的东西匹配,这是包含完整文档根目录的文件路径。
这表明您的RewriteRule不在您的.htaccess文件中,而是在您的或Apache配置文件中的规则中,对吗?
相反,您应该尝试使用RewriteCond获取所需的值,以便保证您与REQUEST_URI匹配,例如:
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteRule . topicview.php?topicname=%1 [L]
请注意%1而不是$ 1,它允许您使用RewriteCond中捕获的值。