Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 修改重写规则以操作查询字符串_Php_Apache_.htaccess_Mod Rewrite_Path - Fatal编程技术网

Php 修改重写规则以操作查询字符串

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 %

好的。首先,我知道在StackOverflow这里有很多这样的问题的答案,但它们只帮了我一部分。 不幸的是,很多答案都非常具体,只对最初的提问者有帮助。 因此,如果我能得到一个解释,也可以扩展到其他用户的问题(如果我需要在其他页面中使用它,我自己也可以)。尽管如此,我的问题如下:

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/..