Php 修改重写规则以操作查询字符串
好的。首先,我知道在StackOverflow这里有很多这样的问题的答案,但它们只帮了我一部分。 不幸的是,很多答案都非常具体,只对最初的提问者有帮助。 因此,如果我能得到一个解释,也可以扩展到其他用户的问题(如果我需要在其他页面中使用它,我自己也可以)。尽管如此,我的问题如下:Php 修改重写规则以操作查询字符串,php,apache,.htaccess,mod-rewrite,path,Php,Apache,.htaccess,Mod Rewrite,Path,好的。首先,我知道在StackOverflow这里有很多这样的问题的答案,但它们只帮了我一部分。 不幸的是,很多答案都非常具体,只对最初的提问者有帮助。 因此,如果我能得到一个解释,也可以扩展到其他用户的问题(如果我需要在其他页面中使用它,我自己也可以)。尽管如此,我的问题如下: Options +FollowSymLinks -MultiViews RewriteEngine On # Unless directory, remove trailing slash RewriteCond %
Options +FollowSymLinks -MultiViews
RewriteEngine On
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://localhost/website/$1 [R=301,L]
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://localhost/website/$1 [R=301,L]
# Assume php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]
我一直在尝试使用mod_rewrite来简化我的URL,让我的用户可以更轻松地在地址栏中键入内容。
因此,我必须编辑.htaccess以在外部隐藏.php扩展,并编辑代码上的所有链接。
我发现有效的重写规则如下:
Options +FollowSymLinks -MultiViews
RewriteEngine On
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://localhost/website/$1 [R=301,L]
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://localhost/website/$1 [R=301,L]
# Assume php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]
这些只处理外部重定向,但对我来说,我真的不认为需要内部重定向,因为我可以只编写URL的简短形式。
如果您只是将扩展添加回html表单中,就没有理由隐藏扩展,对吗
我通过GET方法接收用户名来绘制用户页面
www.webpage.com/userpage.php?view=username
我想要的是成为一个URL
www.webpage.com/user/username
当我最终得到一条适用于此的规则时,CSS文件没有加载。图像是否可以加载取决于我使用的规则。
我放弃了我写的一个,因为它不仅这样做了,而且还在其他地方添加了路径
RewriteRule ^(.*[^/]) userpage.php?view=$1 [QSA,L]
基本上,这个规则将“/userpage/”应用于域上的所有链接,而不管我在地址栏中键入了什么。
当我用userpage.php键入complete时,它将其重写为userpage/userpage/user
RewriteRule ^user/(\w+)/?$ userpage.php?view=$1
非常相似,结果相同,但也没有显示图像。
我知道这里的问题是相对路径,但只要将所有路径更改为绝对路径,就会从代码中删除所有可移植性
我明白,我在这里真正需要的是使路径中只有带有/user/的页面才能被重写。
我不仅想了解我需要对规则应用什么样的条件,只改变我想要的,而不是其他一切,而且如果有人能告诉我是否有一种方法可以通过完整路径访问页面,我会非常高兴
例如,www.fullpath.com/user/username显示页面,但www.fullpath.com/userpage?view=用户名不可访问。保持.htaccess如下:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
## Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ $1 [R=302,L,NE]
RewriteRule ^user/([^/]+)/?$ userpage.php?view=$1 [L,QSA,NC]
# To internally forward /dir/file to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]
另外,在页面HTML的
部分添加这一点:
,这样每个相对URL都可以从该URL而不是当前页面的URL中解析出来。CSS/图像问题肯定在其他答案中有所涉及(
)。重写user/username
实际上是最常见的重写规则之一。两者都不涉及处理\u请求或查询\u字符串。请详细说明您到底尝试了什么,以及是如何“坏掉”的。我尝试了针对CSS/图像问题的“”修复,但不起作用。我还尝试在规则上添加完整路径,并使用RewriteBase来修复它。那也没用。我真的不记得我用来达到这个目的的确切代码是什么。没有人有任何业务使用RewriteBase。如果不能使简单的基本href工作,请使用绝对图像/css URL。同样,对于user/\w+
重写的具体建议,您需要做一些补充。或者你的问题最终会以copypata作为答案。基本上我使用的规则是RewriteRule^(.*[^/])userpage.php?view=$1[QSA,L]
,但解决方法在这方面不起作用。它仍然给我带来很多麻烦,因为它总是到处添加“/userpage/”。它没有达到我想要的效果。它太基本了,没有得到适当的约束。是的,我真的不想要一个简单的答案。答案和问题上的答案完全一样,顺序是一样的(只有两条规则中的一条违反了规则)。我把帖子简化了一点。有很多不相关的信息。这只是让它转发内部链接。外部链接不起作用。因此,如果您键入“”,它将无法工作,因为它不知道应该查找“.php”文件。您是否获得了domain.com/page
的404?page.php
是否存在?domain.com/page.php
有效吗?是、是和否。它运行在本地计算机上,而不是专用服务器上。如果你只是重定向内部页面,它只会将我单击的链接更改为无扩展路径。但是如果您不使用我在.htaccess上已有的代码,它就不会像PHP一样读取无扩展文件。不管怎样,我的主要问题不是普通页面。它与userpage.php上的查询有关。只想在这里明确地保留这一点:所有页面都在根目录上。没有“/user/”目录,只有userpage.php文件。我想重命名它,就好像有一个/user/目录,然后是查询字符串上的用户名。如果domain.com/page.php
给出404,那么domain.com/page
也会给出404。检查/user/..